package com.fs.leetcode.lianbiao;

/**
 * @author ：hyq
 * @date ：Created in 2020/5/21 14:20
 * @description：
 * @modified By：
 */
public class addTwoNumbers {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0); //定义一个预先指针
        ListNode cur = pre;                   //预先指针的下一个节点指向真正的头结点head
        //定义经位数
        Integer carry = 0;
        int sum = 0;
        while (l1 != null && l2!=null){
            int x = l1 == null?0:l1.name; //获取列表中的每个值
            int y = l2 == null?0:l2.name;
            //计算是否需要进位
            sum =x+y+carry;
            carry = sum /10;
            sum = sum%10;
            cur.next = new ListNode(sum);   // 设置计算后列表的值
            cur = cur.next;                 //移动指针指向下一个数
            if(l1!=null){                   //移动两个链表的指针获取链表的所有数据
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
            //如果进位为1则在新链表最前方添加节点 1  这个地方么看懂
            if(carry == 1) {
                cur.next = new ListNode(carry);
            }
        }
        return pre.next;
    }



}

/**
 * 定义一个列表
 */
class ListNode {
    public Integer name;
    public ListNode next; //指向下一个节点
    //构造器
    public ListNode(Integer name) {
        this.name = name;

    }
    //为了显示方法，我们重新toString
    @Override
    public String toString() {
        return "HeroNode [name=" + name + "]";
    }
}
